from abc import ABC, abstractmethod
from typing import Dict, Any
from src.core.state import AgentState

class BaseAgent(ABC):
    """
    Abstract base class for all agents.
    Defines the common interface that all agents must implement.
    """
    
    @abstractmethod
    def process(self, state: AgentState) -> Dict[str, Any]:
        """
        Process the current state and return updates.
        
        Args:
            state: Current agent state
            
        Returns:
            Dictionary with state updates
        """
        pass
    
    @abstractmethod
    def route(self, state: AgentState) -> str:
        """
        Determine the next step based on the current state.
        
        Args:
            state: Current agent state
            
        Returns:
            Next step identifier
        """
        pass